package com.cet.designpatterns.principle.dependenceinversion;

public class DependencyPass {

	public static void main(String[] args) {
		ChangHong changHong = new ChangHong();
		//方式一
		//new OpenAndClose().open(changHong);

		//方式二
		//new OpenAndClose(changHong).open();


		//方式三
		OpenAndClose openAndClose = new OpenAndClose();
		openAndClose.setTv(changHong);
		openAndClose.open();
	}
}

// 方式1： 通过接口传递实现依赖
 //开关的接口
// interface IOpenAndClose {
// 	void open(ITV tv); //抽象方法,接收接口
// }
//
// interface ITV { //ITV接口
// 	void play();
// }
//// 实现接口
// class OpenAndClose implements IOpenAndClose{
//	 @Override
//	 public void open(ITV tv){
//	 	tv.play();
//	 }
// }

class ChangHong implements ITV{
 	@Override
 	public void play() {
	 System.out.println("长虹电视机打开！");
 }
}

// 方式2: 通过构造方法依赖传递
// interface IOpenAndClose {
// 	void open(); //抽象方法
// }
// interface ITV { //ITV接口
//	 void play();
// }
// class OpenAndClose implements IOpenAndClose{
// 	private ITV tv;
// 	public OpenAndClose(ITV tv){
// 	this.tv = tv;
// 	}
//	 @Override
//	 public void open(){
//		this.tv.play();
//	 }
// }

// 方式3 , 通过setter方法传递
interface IOpenAndClose {

	void open(); // 抽象方法

	void setTv(ITV tv);
}

interface ITV { // ITV接口
	void play();
}

class OpenAndClose implements IOpenAndClose {
	private ITV tv;

	@Override
	public void setTv(ITV tv) {
		this.tv = tv;
	}

	@Override
	public void open() {
		this.tv.play();
	}
}
